﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Telerik.Web.UI;
using SMA.GENTEv1;

public partial class Protegidos_Administracao_Cadastros__wf_wfBeneficiosCM : System.Web.UI.Page
{
    int idContrato = 0;
    int idProcessoContrato = 0;
    private const int idTipoDocumento = 51;

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString["idProcessoContrato"] != null)
                idProcessoContrato = Int32.Parse(Request.QueryString["idProcessoContrato"].ToString());

            if (Request.QueryString["idContrato"] != null)
                idContrato = Int32.Parse(Request.QueryString["idContrato"].ToString());

            if (!IsPostBack)
            {
                CarregaProtocolo(rcbProtocolo);
                AcertaCampos();
                CarregaDataFim();
            }
            OcultaMsgPagina(true);
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    #region Eventos

    #region Eventos - Geral
    protected void btnSalvar_Click(object sender, EventArgs e)
    {

    }
    protected void btnIncluir_Click(object sender, EventArgs e)
    {
        try
        {
            Novo();
            ExibirMensagem(false, "Parâmetro cadastrado com sucesso!");
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }
    protected void btnLimpar_Click(object sender, EventArgs e)
    {
        try
        {
            LimparCampos();
            OcultaMsgPagina(true);
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }
    #endregion

    #region Eventos - ComboBox
    protected void rcbTpDiaMensal_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        try
        {
            //if (rcbTpDiaMensal.SelectedValue == "Corrido")
            //    CarregaDia(rcbDia1, false, false);
            //else
            //    CarregaDiaUtil(rcbDia1);
            //rcbDia1.Enabled = true;
            //OcultaMsgPagina(true);
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }
    #endregion

    #region Eventos - Grid
    protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        try
        {
            Pesquisa();
            OcultaMsgPagina(true);
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }
    protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
    {
        try
        {
            if (e.CommandName == "Visualizar")
            {
                int idWfConfig = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IdWfConfig"].ToString());
                CarregarDados(idWfConfig);
            }
            if (e.CommandName == "Desativar")
            {
                int idWfConfig = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IdWfConfig"].ToString());

                WorkflowConfig wfConfig = new WorkflowConfig(idWfConfig);
                wfConfig.Status = new StatusConfiguracaoWorkflow(3);
                wfConfig.Salvar();

                AtualizarGrid();
            }
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }
    #endregion

    #endregion

    #region Metodos

    #region Metodos - Geral
    private void CarregarDados(int idWfConfig)
    {
        try
        {
            LimparCampos();

            WorkflowConfig wfConfig = new WorkflowConfig(idWfConfig);

            txtDtInicio.SelectedDate = wfConfig.DataInicio;
            txtDtFim.Text = Convert.ToDateTime(wfConfig.DataFim).ToString("dd/MM/yyyy");

            WorkflowConfigData wfConfigData = new WorkflowConfigData();
            List<WorkflowConfigData> listWf = wfConfigData.SelectPor(idWfConfig);

            foreach (WorkflowConfigData item in listWf)
            {
                CarregarPeriodicidade(item);
            }

            CarregarProtocolo(wfConfig.IdProcessoContrato);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregarDadosTipoMensal(WorkflowConfigData wfConfigData)
    {
        try
        {
            //RadComboBoxItem itemTpDia = rcbTpDiaMensal.FindItemByValue(wfConfigData.TipoDia);
            //rcbTpDiaMensal.SelectedIndex = itemTpDia.Index;

            //if (wfConfigData.TipoDia == "Corrido")
            //    CarregaDia(rcbDia1, false, false);
            //else
            //    CarregaDiaUtil(rcbDia1);
            //RadComboBoxItem itemDia = rcbDia1.FindItemByValue(wfConfigData.Dia.ToString());
            //rcbDia1.SelectedIndex = itemDia.Index;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregarPeriodicidade(WorkflowConfigData wfConfigData)
    {
        try
        {
            ConfiguraParametrosMensal();
            CarregarDadosTipoMensal(wfConfigData);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregarProtocolo(int idProcessoContrato)
    {
        try
        {
            ProcessoContrato processoContrato = new ProcessoContrato(idProcessoContrato);
            RadComboBoxItem itemProtocolo = rcbProtocolo.FindItemByValue(processoContrato.TipoProtocolo.IdProtocolo.ToString());
            rcbProtocolo.SelectedIndex = itemProtocolo.Index;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void Novo()
    {
        try
        {
            Contrato contrato = new Contrato(idContrato);

            if (txtDtInicio.SelectedDate >= contrato.DataImplantacao)
            {
                DateTime dtFimContrato;

                if (contrato.DataProrrogacao == DateTime.MinValue)
                    dtFimContrato = contrato.DataFimVigencia;
                else
                    dtFimContrato = contrato.DataProrrogacao;

                if (txtDtInicio.SelectedDate < dtFimContrato)
                {
                    bool grava = true;

                    WorkflowConfig wfConfigPesq = new WorkflowConfig();
                    List<WorkflowConfig> listWfConfig = wfConfigPesq.SelectPor(idTipoDocumento, idContrato, idProcessoContrato);

                    int idStatus = 1;

                    foreach (WorkflowConfig item in listWfConfig)
                    {
                        if (item.Status.IdStatusConfiguracaoWorkflow == 4)
                        {
                            grava = false;
                            throw new Exception("Já existe um parâmetro futuro cadastrado!");
                        }
                        else
                        {
                            if (item.Status.IdStatusConfiguracaoWorkflow == 1)
                            {
                                grava = false;
                                throw new Exception("Já existe um parâmetro lançado no sistema com situação de Ativo. Para este benefício (processo), será necessário primeiro desativar o processo (veja grade abaixo) para após lançar outra configuração de parâmetro para o mesmo.");
                            }
                        }
                    }

                    if (grava)
                    {
                        WorkflowConfig wfConfig = new WorkflowConfig();
                        wfConfig.TipoDocumento = new TipoDocumento(idTipoDocumento);
                        wfConfig.DataInicio = txtDtInicio.SelectedDate;

                        if (contrato.DataProrrogacao == DateTime.MinValue)
                            wfConfig.DataFim = contrato.DataFimVigencia;
                        else
                            wfConfig.DataFim = contrato.DataProrrogacao;

                        wfConfig.Status = new StatusConfiguracaoWorkflow(idStatus);
                        wfConfig.IdContrato = idContrato;
                        wfConfig.IdProcessoContrato = idProcessoContrato;

                        wfConfig.Salvar();

                        AtualizarProtocoloProcesso(idProcessoContrato);
                        //GravarParametros(wfConfig);

                        AtualizarGrid();
                        lblResultado.Text = "Parâmetros cadastrados com sucesso!";
                    }

                }
                else
                {
                    throw new Exception("Data de início maior que a data final!");
                }

            }
            else
            {
                throw new Exception("Data de início menor o que a data de implantação (" + contrato.DataImplantacao.ToString("dd/MM/yyyy") + ")!");
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Erro: " + ex.Message);
        }

    }

    private void AtualizarProtocoloProcesso(int idProcessoContrato)
    {
        try
        {
            ProcessoContrato processoContrato = new ProcessoContrato(idProcessoContrato);
            processoContrato.TipoProtocolo = new TipoProtocolo(int.Parse(rcbProtocolo.SelectedValue));
            processoContrato.Salvar();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void GravarParametrosMensal(WorkflowConfig wfConfig)
    {
        try
        {
            //WorkflowConfigData wfConfigData = new WorkflowConfigData();

            //wfConfigData.WfConfig = wfConfig;
            //wfConfigData.TipoDia = rcbTpDiaMensal.SelectedValue;
            //wfConfigData.Dia = int.Parse(rcbDia1.SelectedValue);
            //wfConfigData.TipoPagamento = new TipoPagamento(16);
            //wfConfigData.TipoPeriodicidade = new TipoPeriodicidade(3);
            //wfConfigData.Salvar();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void GravarParametros(WorkflowConfig wfConfig)
    {
        GravarParametrosMensal(wfConfig);
    }

    private void AtualizarGrid()
    {
        try
        {
            Pesquisa();
            RadGrid1.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void AcertaCampos()
    {
        try
        {
            btnSalvar.Visible = false;
            //dvEntregaMensal.Visible = true;

            //rcbDia1.Enabled = false;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void LimparCampos()
    {
        try
        {
            AcertaCampos();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregaDataFim()
    {
        try
        {
            ProcessoContrato processo = new ProcessoContrato(idProcessoContrato);
            Contrato contrato = new Contrato(processo.IdContrato);

            if (contrato.DataProrrogacao == DateTime.MinValue)
                txtDtFim.Text = contrato.DataFimVigencia.ToString("dd/MM/yyyy");
            else
                txtDtFim.Text = contrato.DataProrrogacao.ToString("dd/MM/yyyy");
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void ExibirMensagem(bool _msgErro, string _textoMsg)
    {
        try
        {
            OcultaMsgPagina(false);
            if (_msgErro)
            {
                lblResultado.ForeColor = System.Drawing.Color.Red;
                lblResultado.Text = _textoMsg;
            }
            else
            {
                lblResultado.ForeColor = System.Drawing.Color.Black;
                lblResultado.Text = _textoMsg;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void OcultaMsgPagina(bool oculta)
    {
        trMensagem.Visible = !oculta;
    }
    #endregion

    #region Metodos - ComboBox
    private void CarregaProtocolo(RadComboBox combo)
    {
        try
        {
            TipoProtocolo tipoProtocolo = new TipoProtocolo();

            combo.DataTextField = "Descricao";
            combo.DataValueField = "IdProtocolo";
            combo.DataSource = tipoProtocolo.SelectAll();
            combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void CarregaTipoDia(RadComboBox combo)
    {
        try
        {
            combo.Items.Clear();
            combo.Text = "";
            combo.Items.Add(new RadComboBoxItem("Dia", "Corrido"));
            combo.Items.Add(new RadComboBoxItem("Dia Util", "Util"));
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void ConfiguraParametrosMensal()
    {
        try
        {
            //dvEntregaMensal.Visible = true;
            //tdPontTpEntrega.Visible = true;
            //rcbTpDiaMensal.Visible = true;
            //rcbDia1.Visible = true;
            //CarregaTipoDia(rcbTpDiaMensal);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void CarregaDia(RadComboBox combo, bool quinzena, bool primeiraQuinzena)
    {
        try
        {
            combo.Items.Clear();
            combo.Text = "";
            switch (quinzena)
            {
                case false:
                    for (int i = 31; i >= 1; i--)
                    {
                        combo.Items.Insert(0, new RadComboBoxItem(i.ToString(), i.ToString()));
                    }
                    break;
                case true:
                    if (primeiraQuinzena)
                    {
                        for (int i = 15; i >= 1; i--)
                        {
                            combo.Items.Insert(0, new RadComboBoxItem(i.ToString(), i.ToString()));
                        }
                    }
                    else
                    {
                        for (int i = 31; i >= 16; i--)
                        {
                            combo.Items.Insert(0, new RadComboBoxItem(i.ToString(), i.ToString()));
                        }
                    }
                    break;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void CarregaDiaUtil(RadComboBox combo)
    {
        try
        {
            combo.Items.Clear();
            combo.Text = "";
            for (int i = 27; i >= 1; i--)
            {
                combo.Items.Insert(0, new RadComboBoxItem(i.ToString() + "º", i.ToString()));
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    #endregion

    #region Metodos - Grid
    private void Pesquisa()
    {
        try
        {
            RadGrid1.DataSource = CarregaParametros();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    protected List<WorkflowConfig> CarregaParametros()
    {
        try
        {
            WorkflowConfig wfConfig = new WorkflowConfig();
            List<WorkflowConfig> listWfConfig = wfConfig.SelectPor(idTipoDocumento, idContrato, idProcessoContrato);

            return listWfConfig;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    #endregion

    #endregion
}
